/***************************************************
 @Name :        1196kk0
 @Time :        2025-05-26
 @Email :       2232506563@qq.com
 @Comment :     按键初始化及读取按键状态
 @FileName :    drv_Key.c
 @Version :     4.0
****************************************************/

#include "drv_Key.h"

/***************************************
函数名：Key_USER_Config
函数功能：对USER按键引脚进行初始化
输入参数：无
输出参数：无
其它：//USER      PF9
****************************************/
void Key_USER_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF , ENABLE);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_Init(GPIOF , &GPIO_InitStruct);
}

/***************************************
函数名：Key_Config
函数功能：对Key引脚进行初始化 初始化外部中断
输入参数：无
输出参数：无
其它： //Key_1     PC9
      //Key_2     PC8
      //Key_3     PC5
****************************************/
void Key_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC , ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC , ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC , ENABLE);

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_Init(GPIOC , &GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
    GPIO_Init(GPIOC , &GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
    GPIO_Init(GPIOC , &GPIO_InitStruct);
}

/***************************************
函数名：Read_Key
函数功能：读取按键状态
输入参数：无
输出参数：Key_ID
其它：//USER      PF9
      //Key_1     PC9
      //Key_2     PC8
      //Key_3     PC5
****************************************/
uint8_t Read_Key(void)
{
    if (!GPIO_ReadInputDataBit(GPIOF , GPIO_Pin_9))
    {
        delay_ms(5);
        while(!GPIO_ReadInputDataBit(GPIOF , GPIO_Pin_9));
        delay_ms(5);
        return Key_USER_ID;
    }
    if (!GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_9))
    {
        delay_ms(5);
        while(!GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_9));
        delay_ms(5);
        return Key_1_ID;
    }
    if (!GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_8))
    {
        delay_ms(5);
        while(!GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_8));
        delay_ms(5);
        return Key_2_ID;
    }
    if (!GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_5))
    {
        delay_ms(5);
        while(!GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_5));
        delay_ms(5);
        return Key_3_ID;
    }
    return 0;
}







